import random

require = """
第5周作业：
随机生成一个字符串：
1 字符串是由 数字和大小写字母组成
2 不含特殊符号
3 可以指定生成几位
请设计出对应的函数
给定一个只包含大小写字母，数字的字符串，对其进行排序，保证：
s = "Sorting1234" 
1 所有的小写字母在大写字母前面
2 所有的字母在数字前面
3 所有的奇数在偶数前面 
请设计出对应的函数



"""

def gen_strings(n):
#     if not n.isdigit():
#         msg  = "请给出一个整数"
#         return msg
#     if int(n) <= 8 :
#         msg  = "请给出一个整数"
#         return msg
    lower_int = random.choices(range(1,n-2))[0]
    up_int = random.choices(range(1,n - 1 - lower_int))[0]
    digit_int = n - lower_int - up_int
    mystr = []
    # 可以考虑下string这个内置库
    myup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    mylow = 'abcdefghijklmnopqrstuvwxyz'
    mydigit = '0123456789'
    for i,j in zip((myup,mylow,mydigit),(lower_int,up_int,digit_int)):
        mystr += random.choices(i,k=j)
    
    random.shuffle(mystr)
    return ''.join(mystr)

def mysort(mystr):
    odd = {x for x in '13579'}
    even = {x for x in '24680'}
    up   = {x for x in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'}
    low  = {x for x in 'abcdefghijklmnopqrstuvwxyz'}
    odd_l = []
    even_l = []
    up_l = []
    low_l = []
    for i in mystr:
        #print(i)
        if i in odd:
            odd_l.append(i)
#             print(up_l)
        if i in even:
            even_l.append(i)
#             print(even_l)
        if i in up:
            up_l.append(i)
#             print(up_l)
        if i in low:
            low_l.append(i)
#             print(low_l)
#     print(low_l, up_l,odd_l,even_l)
    # 每个列表不需要排序下吗？
    result = ''.join(low_l+up_l+odd_l+even_l)
    return result


for i in range(5):
    result = gen_strings(10)
    print(f"随机字符串生成是：{result}")
    sorted_result = mysort(result)
    print(f"排序后字符串是：{sorted_result}")
    print('*' * 40)

